/**
 * @description Vuex模块：小程序基础公共配置、用户信息、是否已检查更新
 * @author yinzhi
 * @date 2025-03-04
 */
import { logger } from '@/utils/log.js'
export default {
    namespaced: true,
    state: {
        // 小程序基础公共配置
        systemInfo: {
            // 上方顶部安全区状态栏高度 单位px
            statusBarHeight: '',
            // 头部高度 ios:44px android:48px
            barHeight: 44,
            // 头部高度+顶部状态栏高度 单位px
            navBarHeight: 0,
            // 像素比
            rpxNum: 1,
            // 屏幕的宽高 单位px
            screenWidth: 0,
            screenHeight: 0,
            // 系统版本
            system: '',
            // 设备机型
            model: '',
            // 设备品牌
            brand: '',
            // 是否iphone x以上机型
            isIphoneX: false,
            // 底部安全区域 主要用于iphone x以上 单位px
            footBarHeight: 0
        },
        // 用户信息 后续可能会有配置用户信息页面，做暂时的存储
        userInfo: {
            avatar: '', //头像
            id: 0, //用户id
            mobile: '', //手机号码
            nickname: '' //用户名
        },
        // 小程序应用是否已检查更新
        isApplyUpdate: false
    },
    getters: {
        systemInfo: state => state.systemInfo,
        userInfo: state => state.userInfo,
        isApplyUpdate: state => state.isApplyUpdate
    },
    mutations: {
        setIsApplyUpdate(state, bool) {
            state.isApplyUpdate = bool
        },
        // 小程序基础公共配置写入
        setSystemInfo(state, data) {
            state.systemInfo = data
        },
        // 用户信息写入
        setUserInfo(state, userInfo) {
            state.userInfo = userInfo
            uni.setStorageSync('userInfo', userInfo)
        }
    },
    actions: {
        // 初始化用户信息
        async initUserInfo({ commit }) {
            const userInfo = await uni.getStorageSync('userInfo')
            commit('setUserInfo', userInfo)
        },
        // 获取小程序基础公共配置
        getSystemInfo({ commit }) {
            try {
                uni.getSystemInfo({
                    success: e => {
                        let systemInfo = {}
                        // 判断手机型号是否为iphone x以上
                        const iphoneReg = /(^X|x\w)|(^1\d)|(^2\d)|(^3\d)/g
                        systemInfo.isIphoneX = false
                        if (e.model.includes('iPhone')) {
                            // 截取手机型号
                            let iphoneModel = e.model.slice(7)
                            if (iphoneReg.test(iphoneModel)) {
                                systemInfo.isIphoneX = true
                            }
                        }
                        systemInfo.statusBarHeight = e.statusBarHeight
                        systemInfo.barHeight =
                            e.platform == 'ios' || e.model.includes('iPhone') ? 44 : 48
                        systemInfo.navBarHeight = systemInfo.barHeight + e.statusBarHeight
                        systemInfo.rpxNum = e.screenWidth / 375
                        systemInfo.screenWidth = e.screenWidth //设置屏幕宽度
                        systemInfo.screenHeight = e.windowHeight //设置屏幕高度
                        systemInfo.system = e.system
                        systemInfo.model = e.model
                        systemInfo.brand = e.brand
                        systemInfo.footBarHeight = systemInfo.isIphoneX ? 20 : 0
                        commit('setSystemInfo', systemInfo)
                    },
                    fail: e => {
                        logger.error('[uni.getSystemInfo] 小程序基础公共配置获取失败: ', e)
                    }
                })
            } catch (error) {
                logger.error('[getSystemInfo] 小程序基础公共配置获取失败: ', error)
            }
        }
    }
}
